home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Mail / pine3.92 / pico / pico.h < prev    next >
C/C++ Source or Header  |  1996-03-14  |  15KB  |  468 lines

  1. /*
  2.  * $Id: pico.h,v 4.69 1996/03/15 07:41:11 hubert Exp $
  3.  *
  4.  * Program:    pico.h - definitions for Pine's composer library
  5.  *
  6.  *
  7.  * Michael Seibel
  8.  * Networks and Distributed Computing
  9.  * Computing and Communications
  10.  * University of Washington
  11.  * Administration Builiding, AG-44
  12.  * Seattle, Washington, 98195, USA
  13.  * Internet: mikes@cac.washington.edu
  14.  *
  15.  * Please address all bugs and comments to "pine-bugs@cac.washington.edu"
  16.  *
  17.  *
  18.  * Pine and Pico are registered trademarks of the University of Washington.
  19.  * No commercial use of these trademarks may be made without prior written
  20.  * permission of the University of Washington.
  21.  * 
  22.  * Pine, Pico, and Pilot software and its included text are Copyright
  23.  * 1989-1996 by the University of Washington.
  24.  * 
  25.  * The full text of our legal notices is contained in the file called
  26.  * CPYRIGHT, included with this distribution.
  27.  */
  28.  
  29. #ifndef    PICO_H
  30. #define    PICO_H
  31. /*
  32.  * Defined for attachment support
  33.  */
  34. #define    ATTACHMENTS    1
  35.  
  36.  
  37. /*
  38.  * defs of return codes from pine mailer composer.
  39.  */
  40. #define    BUF_CHANGED    0x01
  41. #define    COMP_CANCEL    0x02
  42. #define    COMP_EXIT    0x04
  43. #define    COMP_FAILED    0x08
  44. #define    COMP_SUSPEND    0x10
  45. #define    COMP_GOTHUP    0x20
  46.  
  47.  
  48. /*
  49.  * top line from the top of the screen for the editor to do 
  50.  * its stuff
  51.  */
  52. #define    COMPOSER_TOP_LINE    2
  53. #define    COMPOSER_TITLE_LINE    0
  54.  
  55.  
  56.  
  57. /*
  58.  * definitions of Mail header structures 
  59.  */
  60. struct hdr_line {
  61.         char text[256];
  62.         struct  hdr_line        *next;
  63.         struct  hdr_line        *prev;
  64. };
  65.  
  66.  
  67. /* 
  68.  *  This structure controls the header line items on the screen.  An
  69.  * instance of this should be created and passed in as an argument when
  70.  * pico is called. The list is terminated by an entry with the name
  71.  * element NULL.
  72.  */
  73.  
  74. struct headerentry {
  75.         char     *prompt;
  76.     char     *name;
  77. #if defined(DOS) || defined(HELPFILE)
  78.     short      help;
  79. #else
  80.     char    **help;
  81. #endif
  82.         int      prlen;
  83.         int      maxlen;
  84.         char    **realaddr;
  85.         int     (*builder)();        /* Function to verify/canonicalize val */
  86.     struct headerentry        *affected_entry, *next_affected;
  87.                      /* entry builder's 4th arg affects     */
  88.         char   *(*selector)();       /* Browser for possible values         */
  89.         char     *key_label;         /* Key label for key to call browser   */
  90.         unsigned  display_it:1;         /* field is to be displayed by default */
  91.         unsigned  break_on_comma:1;  /* Field breaks on commas              */
  92.         unsigned  is_attach:1;       /* Special case field for attachments  */
  93.         unsigned  rich_header:1;     /* Field is part of rich header        */
  94.         unsigned  only_file_chars:1; /* Field is a file name                */
  95.         unsigned  single_space:1;    /* Crush multiple spaces into one      */
  96.         unsigned  sticky:1;          /* Can't change this via affected_entry*/
  97.         unsigned  dirty:1;           /* We've changed this entry            */
  98.     unsigned  start_here:1;         /* begin composer on first on lit      */
  99. #ifdef    KS_OSDATAVAR
  100.     KS_OSDATAVAR             /* Port-Specific keymenu data */
  101. #endif
  102.         struct    hdr_line        *hd_text;
  103. };
  104.  
  105.  
  106. /*
  107.  * Structure to pass as arg to builders
  108.  */
  109. typedef struct bld_arg {
  110.     char           *tptr;    /* pointer to malloc'd text              */
  111.     struct bld_arg *next;    /* next one in list if more than one affected*/
  112. } BUILDER_ARG;
  113.  
  114.  
  115. /*
  116.  * structure to keep track of header display
  117.  */
  118. struct on_display {
  119.     int             p_off;            /* offset into line */
  120.     int             p_len;            /* length of line   */
  121.     int             p_line;        /* physical line on screen */
  122.     int             top_e;            /* topline's header entry */
  123.     struct hdr_line    *top_l;            /* top line on display */
  124.     int             cur_e;            /* current header entry */
  125.     struct hdr_line    *cur_l;            /* current hd_line */
  126. };                        /* global on_display struct */
  127.  
  128.  
  129. /*
  130.  * Structure to handle attachments
  131.  */
  132. typedef struct pico_atmt {
  133.     char *description;            /* attachment description */
  134.     char *filename;            /* file/pseudonym for attachment */
  135.     char *size;                /* size of attachment */
  136.     char *id;                /* attachment id */
  137.     unsigned short flags;
  138.     struct pico_atmt *next;
  139. } PATMT;
  140.  
  141.  
  142. /*
  143.  * Flags for attachment handling
  144.  */
  145. #define    A_FLIT    0x0001            /* Accept literal file and size      */
  146. #define    A_ERR    0x0002            /* Problem with specified attachment */
  147. #define    A_TMP    0x0004            /* filename is temporary, delete it  */
  148.  
  149.  
  150. /*
  151.  * Master pine composer structure.  Right now there's not much checking
  152.  * that any of these are pointing to something, so pine must have them pointing
  153.  * somewhere.
  154.  */
  155. typedef struct pico_struct {
  156.     void  *msgtext;            /* ptrs to malloc'd arrays of char */
  157.     char  *pine_anchor;            /* ptr to pine anchor line */
  158.     char  *pine_version;        /* string containing Pine's version */
  159.     char  *alt_ed;            /* name of alternate editor or NULL */
  160.     char  *alt_spell;            /* Checker to use other than "spell" */
  161.     char  *oper_dir;            /* Operating dir (confine to tree) */
  162.     char  *quote_str;            /* prepended to lines of quoted text */
  163.     int    fillcolumn;            /* where to wrap */
  164.     int    menu_rows;            /* number of rows in menu (0 or 2) */
  165.     PATMT *attachments;            /* linked list of attachments */
  166.     long   pine_flags;            /* entry mode flags */
  167.     void  (*helper)();            /* Pine's help function  */
  168.     int   (*showmsg)();            /* Pine's display_message */
  169.     void  (*keybinit)();        /* Pine's keyboard initializer  */
  170.     int   (*raw_io)();            /* Pine's Raw() */
  171.     long  (*newmail)();            /* Pine's report_new_mail */
  172.     long  (*msgntext)();        /* callback to get msg n's text */
  173.     int   (*upload)();            /* callback to rcv uplaoded text */
  174.     char *(*ckptdir)();            /* callback for checkpoint file dir */
  175.     char *(*exittest)();        /* callback to verify exit request */
  176.     char *(*canceltest)();        /* callback to verify cancel request */
  177.     int   (*mimetype)();        /* callback to display mime type */
  178.     void  (*expander)();        /* callback to expand address lists */
  179.     void  (*resize)();            /* callback handling screen resize */
  180. #if defined(DOS) || defined(HELPFILE)
  181.     short search_help;
  182.     short ins_help;
  183.     short composer_help;
  184.     short browse_help;
  185. #else
  186.     char  **search_help;
  187.     char  **ins_help;
  188.     char  **composer_help;
  189.     char  **browse_help;
  190. #endif
  191.     struct headerentry *headents;
  192. } PICO;
  193.  
  194.  
  195. #ifdef    MOUSE
  196. /*
  197.  * Mouse buttons.
  198.  */
  199. #define M_BUTTON_LEFT        0
  200. #define M_BUTTON_MIDDLE        1
  201. #define M_BUTTON_RIGHT        2
  202.  
  203.  
  204. /*
  205.  * Flags.  (modifier keys)
  206.  */
  207. #define M_KEY_CONTROL        0x01    /* Control key was down. */
  208. #define M_KEY_SHIFT        0x02    /* Shift key was down. */
  209.  
  210.  
  211. /*
  212.  * Mouse Events
  213.  */
  214. #define M_EVENT_DOWN        0x01    /* Mouse went down. */
  215. #define M_EVENT_UP        0x02    /* Mouse went up. */
  216. #define M_EVENT_TRACK        0x04    /* Mouse tracking */
  217.  
  218. /*
  219.  * Mouse event information.
  220.  */
  221. typedef struct mouse_struct {
  222.     char    mevent;        /* Indicates type of event:  Down, Up or 
  223.                    Track */
  224.     char    down;        /* TRUE when mouse down event */
  225.     char    doubleclick;    /* TRUE when double click. */
  226.     int    button;        /* button pressed. */
  227.     int    flags;        /* What other keys pressed. */
  228.     int    row;
  229.     int    col;
  230. } MOUSEPRESS;
  231.  
  232.  
  233.  
  234. #ifdef    ANSI
  235. typedef    unsigned long (*mousehandler_t)(int, int, int, int, int);
  236. #else
  237. typedef    unsigned long (*mousehandler_t)();
  238. #endif
  239.  
  240. typedef struct point {
  241.     unsigned    r:8;        /* row value                */
  242.     unsigned    c:8;        /* column value                */
  243. } MPOINT;
  244.  
  245.  
  246. typedef struct menuitem {
  247.     unsigned         val;    /* return value                */
  248.     mousehandler_t    action;    /* action to perform            */
  249.     MPOINT         tl;    /* top-left corner of active area    */
  250.     MPOINT         br;    /* bottom-right corner of active area    */
  251.     MPOINT         lbl;    /* where the label starts        */
  252.     char        *label;
  253.     void            (*label_hiliter)();
  254.     struct menuitem *next;
  255. } MENUITEM;
  256. #endif
  257.  
  258.  
  259. /*
  260.  * Structure used to manage keyboard input that comes as escape
  261.  * sequences (arrow keys, function keys, etc.)
  262.  */
  263. typedef struct  KBSTREE {
  264.     char    value;
  265.         int     func;              /* Routine to handle it         */
  266.     struct    KBSTREE *down; 
  267.     struct    KBSTREE    *left;
  268. } KBESC_T;
  269.  
  270. /*
  271.  * Protos for functions used to manage keyboard escape sequences
  272.  * NOTE: these may ot actually get defined under some OS's (ie, DOS, WIN)
  273.  */
  274. extern    int    kbseq();
  275. extern    void    kpinsert();
  276. extern    void    kbdestroy();
  277.  
  278.  
  279. /*
  280.  * various flags that they may passed to PICO
  281.  */
  282. #define    P_DELRUBS    0x40000000    /* map ^H to forwdel           */
  283. #define    P_LOCALLF    0x20000000    /* use local vs. NVT EOL       */
  284. #define    P_BODY        0x10000000    /* start composer in body       */
  285. #define    P_HEADEND    0x08000000    /* start composer at end of header */
  286. #define    P_VIEW        MDVIEW        /* read-only               */
  287. #define    P_FKEYS        MDFKEY        /* run in function key mode        */
  288. #define    P_SECURE    MDSCUR        /* run in restricted (demo) mode   */
  289. #define    P_TREE        MDTREE        /* restrict to a subtree       */
  290. #define    P_SUSPEND    MDSSPD        /* allow ^Z suspension           */
  291. #define    P_ADVANCED    MDADVN        /* enable advanced features       */
  292. #define    P_CURDIR    MDCURDIR    /* use current dir for lookups       */
  293. #define    P_ALTNOW    MDALTNOW    /* enter alt ed sans hesitation       */
  294. #define    P_SUBSHELL    MDSPWN        /* spawn subshell for suspend       */
  295. #define    P_COMPLETE    MDCMPLT        /* enable file name completion     */
  296. #define    P_DOTKILL    MDDTKILL    /* kill from dot to eol           */
  297. #define    P_SHOCUR    MDSHOCUR    /* cursor follows hilite in browser*/
  298. #define    P_HIBITIGN    MDHBTIGN    /* ignore chars with hi bit set    */
  299. #define    P_DOTFILES    MDDOTSOK    /* browser displays dot files       */
  300. #define    P_ABOOK        MDHDRONLY    /* called as address book editor   */
  301.  
  302. /*
  303.  * definitions for various PICO modes 
  304.  */
  305. #define    MDWRAP        0x00000001    /* word wrap            */
  306. #define    MDSPELL        0x00000002    /* spell error parcing        */
  307. #define    MDEXACT        0x00000004    /* Exact matching for searches    */
  308. #define    MDVIEW        0x00000008    /* read-only buffer        */
  309. #define MDOVER        0x00000010    /* overwrite mode        */
  310. #define MDFKEY        0x00000020    /* function key  mode        */
  311. #define MDSCUR        0x00000040    /* secure (for demo) mode    */
  312. #define MDSSPD        0x00000080    /* suspendable mode        */
  313. #define MDADVN        0x00000100    /* Pico's advanced mode        */
  314. #define MDTOOL        0x00000200    /* "tool" mode (quick exit)    */
  315. #define MDBRONLY    0x00000400    /* indicates standalone browser    */
  316. #define MDCURDIR    0x00000800    /* use current dir for lookups    */
  317. #define MDALTNOW    0x00001000    /* enter alt ed sans hesitation */
  318. #define    MDSPWN        0x00002000    /* spawn subshell for suspend    */
  319. #define    MDCMPLT        0x00004000    /* enable file name completion  */
  320. #define    MDDTKILL    0x00008000    /* kill from dot to eol        */
  321. #define    MDSHOCUR    0x00010000    /* cursor follows hilite in browser */
  322. #define    MDHBTIGN    0x00020000    /* ignore chars with hi bit set */
  323. #define    MDDOTSOK    0x00040000    /* browser displays dot files   */
  324. #define    MDEXTFB        0x00080000    /* stand alone File browser     */
  325. #define    MDTREE        0x00100000    /* confine to a subtree         */
  326. #define    MDMOUSE        0x00200000    /* allow mouse (part. in xterm) */
  327. #define    MDONECOL    0x00400000    /* single column browser        */
  328. #define    MDHDRONLY    0x00800000    /* header editing exclusively   */
  329.  
  330. /*
  331.  * Main defs 
  332.  */
  333. #ifdef    maindef
  334. PICO    *Pmaster = NULL;        /* composer specific stuff */
  335. char    *version = "2.6";        /* PICO version number */
  336.  
  337. #else
  338. extern    PICO *Pmaster;            /* composer specific stuff */
  339. extern    char *version;            /* pico version! */
  340.  
  341. #endif    /* maindef */
  342.  
  343.  
  344. /*
  345.  * Flags for FileBrowser call
  346.  */
  347. #define FB_READ        0x0001        /* Looking for a file to read. */
  348. #define FB_SAVE        0x0002        /* Looking for a file to save. */
  349.  
  350.  
  351. /*
  352.  * number of keystrokes to delay removing an error message, or new mail
  353.  * notification, or checkpointing
  354.  */
  355. #define    MESSDELAY    25
  356. #define    NMMESSDELAY    60
  357. #ifndef CHKPTDELAY
  358. #define    CHKPTDELAY    200
  359. #endif
  360.  
  361.  
  362. /*
  363.  * defs for keypad and function keys...
  364.  */
  365. #define K_PAD_UP        0x0811
  366. #define K_PAD_DOWN        0x0812
  367. #define K_PAD_RIGHT        0x0813
  368. #define K_PAD_LEFT        0x0814
  369. #define K_PAD_PREVPAGE        0x0815
  370. #define K_PAD_NEXTPAGE        0x0816
  371. #define K_PAD_HOME        0x0817
  372. #define K_PAD_END        0x0818
  373. #define K_PAD_DELETE        0x0819
  374. #define BADESC            0x0820
  375. #define K_MOUSE            0x0821
  376. #define K_SCROLLUPLINE        0x0822
  377. #define K_SCROLLDOWNLINE    0x0823
  378. #define K_SCROLLTO        0x0824
  379. #define K_XTERM_MOUSE        0x0825
  380. #define K_DOUBLE_ESC        0x0826
  381. #define K_SWALLOW_TIL_Z        0x0827
  382. #define K_SWALLOW_UP        0x0828
  383. #define K_SWALLOW_DOWN        0x0829
  384. #define K_SWALLOW_LEFT        0x0830
  385. #define K_SWALLOW_RIGHT        0x0831
  386. #define K_KERMIT        0x0832
  387. #define NODATA            0x08FF
  388.  
  389. /*
  390.  * defines for function keys
  391.  */
  392. #define F1      0x1001                  /* Functin key one              */
  393. #define F2      0x1002                  /* Functin key two              */
  394. #define F3      0x1003                  /* Functin key three            */
  395. #define F4      0x1004                  /* Functin key four             */
  396. #define F5      0x1005                  /* Functin key five             */
  397. #define F6      0x1006                  /* Functin key six              */
  398. #define F7      0x1007                  /* Functin key seven            */
  399. #define F8      0x1008                  /* Functin key eight            */
  400. #define F9      0x1009                  /* Functin key nine             */
  401. #define F10     0x100A                  /* Functin key ten              */
  402. #define F11     0x100B                  /* Functin key eleven           */
  403. #define F12     0x100C                  /* Functin key twelve           */
  404.  
  405.  
  406. /*
  407.  * useful function definitions
  408.  */
  409. #ifdef    ANSI
  410. int   pico(PICO *);
  411. int   pico_file_browse(PICO *, char *, char *, char *, int);
  412. void *pico_get(void);
  413. void  pico_give(void *);
  414. int   pico_readc(void *, unsigned char *);
  415. int   pico_writec(void *, int);
  416. int   pico_puts(void *, char *);
  417. int   pico_seek(void *, long, int);
  418. int   pico_replace(void *, char *);
  419. int   pico_fncomplete(char *, char *, int);
  420. #if defined(DOS) || defined(OS2)
  421. int   pico_nfsetcolor(char *);
  422. int   pico_nbsetcolor(char *);
  423. int   pico_rfsetcolor(char *);
  424. int   pico_rbsetcolor(char *);
  425. #endif
  426. #ifdef    MOUSE
  427. int   init_mouse();
  428. void  end_mouse();
  429. int   mouseexist();
  430. int   register_mfunc(mousehandler_t, int, int, int, int);
  431. void  clear_mfunc(mousehandler_t);
  432. unsigned long mouse_in_content(int, int, int, int, int);
  433. unsigned long mouse_in_pico(int, int, int, int, int);
  434. void  mouse_get_last(mousehandler_t *, MOUSEPRESS *);
  435. int   checkmouse(unsigned *, int, int, int);
  436. void  invert_label(int, MENUITEM *);
  437. void  mouseon();
  438. void  mouseoff();
  439. #endif    /* MOUSE */
  440.  
  441. #else
  442. int   pico();
  443. int   pico_file_browse();
  444. void *pico_get();
  445. void  pico_give();
  446. int   pico_readc();
  447. int   pico_writec();
  448. int   pico_puts();
  449. int   pico_seek();
  450. int   pico_replace();
  451. int   pico_fncomplete();
  452. #ifdef    MOUSE
  453. int   init_mouse();
  454. void  end_mouse();
  455. int   mouseexist();
  456. int   register_mfunc();
  457. void  clear_mfunc();
  458. unsigned long mouse_in_content();
  459. void  mouse_get_last();
  460. int   checkmouse();
  461. void  invert_label();
  462. void  mouseon();
  463. void  mouseoff();
  464. #endif    /* MOUSE */
  465. #endif
  466.  
  467. #endif    /* PICO_H */
  468.